package cn.tedu.fresheveryday.service;

import cn.tedu.fresheveryday.pojo.entity.Order;
import cn.tedu.fresheveryday.pojo.entity.ShopCart;
import cn.tedu.fresheveryday.pojo.dto.OrderPagerDTO;
import cn.tedu.fresheveryday.pojo.vo.OrderListVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

public interface IOrderService {
    /**
     * 基于购物车添加订单
     * @param order
     * @param shopCart
     */
    @Transactional
    void insert(Order order, ShopCart shopCart);

    /**
     * 通过id删除订单
     * @param id
     */
    @Transactional
    void deleteById(int id);

    /**
     * 创建订单
     * @param order
     */
    @Transactional
    void generate(Order order);

    /**
     * 通过用户id查询订单总数
     * @param userId
     * @return
     */
    int selectCountByUserId(String userId);

    /**
     * 通过用户id查询订单
     * @param orderPagerDTO
     * @return
     */
    List<OrderListVO> selectByUserId(OrderPagerDTO orderPagerDTO);

    /**
     * 通过订单状态查询用户订单总数
     * @param state
     * @param userId
     * @return
     */
    int selectCountByStateAndUserId(int state, String userId);

    /**
     * 通过订单状态查询用户订单
     * @param orderPagerDTO
     * @return
     */
    List<OrderListVO> selectByStateAndUserId(OrderPagerDTO orderPagerDTO);

    /**
     * 订单支付
     * @param id
     */
    @Transactional
    void pay(Integer id);

    /**
     * 接单
     * @param id
     */
    @Transactional
    void distribute(Integer id);

    /**
     * 订单送达
     * @param id
     */
    void arrive(Integer id);

    /**
     * 确认收货
     * @param id
     */
    @Transactional
    void receipt(Integer id);

    /**
     * 取消订单
     * @param id
     * @return
     */
    @Transactional
    void cancel(int id);

    /**
     * 再来一单
     * @param id 订单id
     */
    @Transactional
    void again(Integer id);
}